home *** CD-ROM | disk | FTP | other *** search
/ Experimental BBS Explossion 3 / Experimental BBS Explossion III.iso / games / nhak_src.zip / LEV_COMP.L < prev    next >
Text File  |  1993-03-16  |  4KB  |  135 lines

  1. %{
  2. /*    SCCS Id: @(#)lev_lex.c    3.0    90/01/04
  3. /*    Copyright (c) 1989 by Jean-Christophe Collet */
  4. /* NetHack may be freely redistributed.  See license for details. */
  5.  
  6. #define LEV_LEX_C
  7.  
  8. /* block some unused #defines to avoid overloading some cpp's */
  9. #define MONDATA_H    /* comment this line for pre-compiled headers */
  10. #define MONFLAG_H    /* comment this line for pre-compiled headers */
  11.  
  12. #include "hack.h"
  13. #include "lev_comp.h"
  14. #include "sp_lev.h"
  15.  
  16. /* Most of these don't exist in flex, yywrap is macro and
  17.  * yyunput is properly declared in flex.skel.
  18.  */
  19. #ifndef FLEX_SCANNER
  20. int FDECL (yyback, (int *, int));
  21. int NDECL (yylook);
  22. int NDECL (yyinput);
  23. int NDECL (yywrap);
  24. int NDECL (yylex);
  25. int FDECL (yyunput, (int));
  26. int FDECL (yyoutput, (int));
  27. #endif
  28.  
  29. #ifdef MSDOS
  30. #undef exit
  31. extern void FDECL(exit, (int));
  32. #endif
  33.  
  34. /* this doesn't always get put in lev_comp.h
  35.  * (esp. when using older versions of bison)
  36.  */
  37.  
  38. extern YYSTYPE yylval;
  39.  
  40. #ifdef MACOS
  41. #undef putchar
  42. #undef putc
  43. #undef printf
  44. #undef Printf
  45. #define Printf printf
  46. # ifdef LSC
  47. #define    putc(c,stream)    (fputc(c,stream))
  48. #define    putchar(c)    (fputc(c,stdout))
  49. # endif
  50. #endif
  51. int line_number = 1;
  52.  
  53. /* This is *** UGLY *** but I can't think a better way to do it
  54.  * I really need a huge buffer to scan maps...
  55.  */
  56.  
  57. #undef YYLMAX
  58. #define YYLMAX    2048
  59.  
  60. %}
  61. %s MAPC
  62. %%
  63. <MAPC>[-|}{+SK\\#. ]*\n    { line_number++; yymore(); }    
  64. <MAPC>ENDMAP\n    { BEGIN 0;
  65.           line_number++;
  66.           yytext[yyleng-7] = 0; /* Discard \nENDMAP */
  67.           yylval.map = (char *) alloc(strlen(yytext)+1);
  68.           strcpy(yylval.map, yytext);
  69.           return MAP_ID;
  70.         }
  71. ^#.*\n        { line_number++; }
  72. MAZE        return MAZE_ID;
  73. LEVEL        return LEVEL_ID;
  74. GEOMETRY    return GEOMETRY_ID;
  75. ^MAP\n        { BEGIN MAPC; line_number++; }
  76. OBJECT        return OBJECT_ID;
  77. MONSTER        return MONSTER_ID;
  78. TRAP        return TRAP_ID;
  79. DOOR        return DOOR_ID;
  80. DRAWBRIDGE    return DRAWBRIDGE_ID;
  81. MAZEWALK    return MAZEWALK_ID;
  82. REGION        return REGION_ID;
  83. RANDOM_OBJECTS    return RANDOM_OBJECTS_ID;
  84. RANDOM_MONSTERS    return RANDOM_MONSTERS_ID;
  85. RANDOM_PLACES    return RANDOM_PLACES_ID;
  86. ALTAR        return ALTAR_ID;
  87. LADDER        return LADDER_ID;
  88. NON_DIGGABLE    return NON_DIGGABLE_ID;
  89. ROOM        return ROOM_ID;
  90. open        { yylval.i=D_ISOPEN; return DOOR_STATE; }
  91. closed        { yylval.i=D_CLOSED; return DOOR_STATE; }
  92. locked        { yylval.i=D_LOCKED; return DOOR_STATE; }
  93. nodoor        { yylval.i=D_NODOOR; return DOOR_STATE; }
  94. broken        { yylval.i=D_BROKEN; return DOOR_STATE; }
  95. north        { yylval.i=W_NORTH; return DIRECTION; }
  96. east        { yylval.i=W_EAST; return DIRECTION; }
  97. south        { yylval.i=W_SOUTH; return DIRECTION; }
  98. west        { yylval.i=W_WEST; return DIRECTION; }
  99. random        { yylval.i = -1; return RANDOM_TYPE; }
  100. object        return O_REGISTER;
  101. monster        return M_REGISTER;
  102. place        return P_REGISTER;
  103. align        return A_REGISTER;
  104. left        { yylval.i=1; return LEFT_OR_RIGHT; }
  105. right        { yylval.i=3; return LEFT_OR_RIGHT; }
  106. center        { yylval.i=2; return CENTER; }
  107. top        { yylval.i=1; return TOP_OR_BOT; }
  108. bottom        { yylval.i=3; return TOP_OR_BOT; }
  109. lit        { yylval.i=1; return LIGHT_STATE; }
  110. unlit        { yylval.i=0; return LIGHT_STATE; }
  111. law        { yylval.i=A_LAW; return ALIGNMENT; }
  112. neutral        { yylval.i=A_NEUTRAL; return ALIGNMENT; }
  113. chaos        { yylval.i=A_CHAOS; return ALIGNMENT; }
  114. shrine        { yylval.i=1; return ALTAR_TYPE; }
  115. altar        { yylval.i=0; return ALTAR_TYPE; }
  116. up        { yylval.i=1; return UP_OR_DOWN; }
  117. down        { yylval.i=0; return UP_OR_DOWN; }
  118. [0-9]+        { yylval.i=atoi(yytext); return INTEGER; }
  119. \"[^"]*\"    { yytext[yyleng-1] = 0; /* Discard the trailing \" */
  120.           yylval.map = (char *) alloc(strlen(yytext+1)+1);
  121.           strcpy(yylval.map, yytext+1); /* Discard the first \" */
  122.           return STRING; }
  123. \n        { line_number++; }
  124. [ \t]+        ;
  125. '.'        { yylval.i = yytext[1]; return CHAR; }
  126. .        { return yytext[0]; }
  127. %%
  128. #ifdef    AMIGA
  129. long *alloc(n)
  130.     unsigned n;
  131. {
  132.     return ((long *)malloc (n));
  133. }
  134. #endif
  135.